# xdfcgi

A common gateway inferface (CGI) program written in C to display Race CTS leaderboards of Xonotic servers. It can also be a static page generator.

## Requirements
    sqlite-devel python3 python-sqlite

The first is only needed for compilation of the C program. The latter two are only for the auxiliary script `allmaps.py`.

## Compiling
`make` makes a CGI program.

`make staticgen` makes a static page generator.

## Usage: Import data from Xonotic

This program uses an sqlite3 database file created from `~/.xonotic/data/data/server.db` (text). 
    
    sqlite3 my-new.db
    sqlite > .read schema.sql

    python scripts/import-from-xon.py my-new.db ~/.xonotic/data/data/server.db

## Usage: CGI Query Strings
The program queries the database `db/cts.db` (`./src/dbquery.c`, function `static bool executequery`)

* `(none)`
    - Query file: `queries/mranks.sql`
    - Requests the map list of the server and related data.

* `?map=[map name]`
    - Query file: `queries/mleaderboard-ojoin.sql`
    - Requests the leaderboard of the map.

* `?player=[clientid]`
    - Query file: `queries/rplayers.sql`
    - Requests a player's ranks for all maps leaderboards s/he is present on.

## Usage: Static Page Generation

    python scripts/allmaps.py

The CGI program is still invoked in static generation. The files `allmaps.py`, `output/leaderboard.css`, `overview.html`, `map.html` produce the output. 

Before executing `allmaps.py`, copy and modify the templates.

    cp templates/overview.html .
    cp templates/map.html .

`allmaps.py` outputs an html file for all distinct maps in the database. The leaderboards for each map (equivalent to `?map=[map name]`) are in `output/maps/`.

## Game Versions Used Under:

* Xonotic 0.8.1
* Xonotic 0.8.2

## Compilers

* gcc (GCC) 10.2.1
* MinGW, GCC 4.7.1

__________________

The script `scripts/import-from-xon.py` is based on  `https://git.teknik.io/antares/xonotic-py-sqlite3-defrag2db` by [Antares](https://antares.neocities.org/).
